package com.linln.modules.system.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import com.linln.modules.system.domain.Area;
import com.linln.modules.system.domain.Menu;
import com.linln.modules.system.repository.AreaRepository;
import com.linln.modules.system.service.AreaService;

/**
 * @author 小懒虫
 * @date 2018/12/02
 */
@Service
public class AreaServiceImpl implements AreaService {

    @Autowired
    private AreaRepository areaRepository;



    /**
     * 获取部门列表数据
     * @param example 查询实例
     * @param sort 排序对象
     */
    @Override
    public List<Area> getListByExample(Example<Area> example, Sort sort) {
        return areaRepository.findAll(example, sort);
    }
    @Override
    public List<Area> findByCodeIn(List<String> code) {
    	return areaRepository.findByCodeIn( code);
    }

    @Override
    public Area findByCode(String code) {
    	return areaRepository.findByCode( code);
    }


    /**
     * 根据父级菜单ID获取本级全部菜单
     * @param pid 父菜单ID
     * @param notId 需要排除的菜单ID
     */
    @Override
    public List<Area> getListByPid(Long pid, Long notId){
        Sort sort = new Sort(Sort.Direction.ASC, "sort");
        return areaRepository.findByPidAndIdNot(sort, pid, notId);
    }

    /**
     * 根据父级菜单ID获取本级全部菜单
     * @param pid 父菜单ID
     * @param notId 需要排除的菜单ID
     */
    @Override
    public List<Area> getListByPid(Long pid){
        Sort sort = new Sort(Sort.Direction.ASC, "sort");
        return areaRepository.findByPid(sort, pid);
    }


    @Override
    public Area getById(Long id) {
    	  if (id == 0L){
              return new Area(id, "顶级菜单", "");
          }
          return areaRepository.findById(id).orElse(null);
    }
    @Override
    public Area findByName(String name) {
    	return areaRepository.findByName( name);

    }


    @Override
    public List<Area> getListBySearchName(String name){
    	return areaRepository.findByLikeName(name);
    }

    @Override
    public List<Area> getCityList(){
    	return areaRepository.getCityList();

    }


    @Override
    public List<Area> getParentByIds(List<Long> ids){
    	return areaRepository.findAllById(ids);

    }


    /**
     * 保存多个菜单
     * @param menuList 菜单实体类列表
     * @return 菜单列表
     */
    @Override
    public List<Area> save(List<Area> menuList){
        return areaRepository.saveAll(menuList);
    }


    /**
     * 获取排序最大值
     * @param pid 父菜单ID
     * @return 最大值
     */
   @Override
   public  Integer getSortMax(Long pid) {
    	return areaRepository.findSortMax(pid);
    }

}



